package com.cx.stream;

import sun.security.krb5.internal.crypto.Aes128;

import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
 * @author zhangshuai
 * @version V1.0
 * @Project Java2_26
 * @Package com.cx.stream
 * @Description:
 * @Date 2025/5/23 10:19
 */

public class StreamTest1 {
    public static void main(String[] args) {
        //Stream 最常用的操作： 对象中的数据类型转换
        List<String> list = new ArrayList<>();
        list.add("hello");
        list.add("world");
        list.add("java");
        list.add("hello world");
        list.add("hello java");
        list.add("hello java");
        list.add("world java");
        list.add("hello world java");
        Stream<String> stream = list.stream();
        //中间操作
        //过滤filter map映射，排序sorted，截取limit，跳过skip，去重distinct，合并concat  parallel 并行流
        //终止操作
        //遍历forEach 匹配匹配findFirst findAny count max min reduce
       /* stream.filter(a -> a.startsWith("h")) //过滤 以h开头
                .map(s->s.toUpperCase()) //映射 全部转大写
                .sorted() //排序
                .limit(4) //截取前三个
                .skip(1)//跳过
                .distinct()//去重
                .forEach(System.out::println);*/
        //stream并行流   多线程操作
        //stream.parallel()
        /*list.parallelStream();
        stream.parallel().filter(a -> a.startsWith("h")) //过滤 以h开头
                .map(s->s.toUpperCase()) //映射 全部转大写
                .sorted() //排序
                .limit(4) //截取前三个
                .skip(1)//跳过
                .distinct()//去重
                .forEach(System.out::println);
*/        ////终止操作
          //遍历forEach 匹配匹配findFirst findAny count max min reduce
        Comparator<String> comparator = (o1,o2) -> o1.compareTo(o2);
        //类::实例方法名
        Comparator<String> comparator1 = String::compareTo;

      /*  System.out.println(stream.min((o1, o2) -> o1.compareTo(o2)));*/
        /*stream.min((o1, o2) -> o1.compareTo(o2)).ifPresent(System.out::println);*/ //如果有值就打印
        /*stream.max(String::compareTo).ifPresent(System.out::println);*/
//        System.out.println(stream.count()); //统计个数
//        System.out.println(stream.anyMatch(s -> s.length() > 10)); //匹配 有一个满足条件就返回true
//        System.out.println(stream.allMatch(s -> s.length() > 10)); //匹配 所有满足条件就返回true
//        System.out.println(stream.noneMatch(s -> s.length() > 10));//匹配 没有满足条件就返回true
//        stream.findFirst().ifPresent(System.out::println); //查找第一个
//        stream.findAny().ifPresent(System.out::println); //查找任意一个
//        System.out.println(Arrays.toString(stream.toArray()));//转数组
//        stream.reduce((a, b) -> (a + b).trim().replace(" ", "")).ifPresent(System.out::println);//归约  把流中的元素归约成一个值
//        System.out.println(stream.collect(Collectors.toSet())); //收集  把流中的元素收集到一个集合中

        Optional<String> asf = Optional.of("asf");
        asf.ifPresent(System.out::println);
    }
}